package com.kevin.designpattern.singlenton;

public class LazySingletonTest {

    public static void main(String[] args) {

    }


}

class LazySingleton {
    private static LazySingleton singleton;

    private LazySingleton() {
    }


    /**
     * 双重加锁进行
     *
     * @return
     */
    public static LazySingleton getInstance() {

        // 当当前的实例不为空直接返回
        if (null == singleton) {
            // 当前实例为null,针对多个线程进行加锁，只允许一个线程进行创建实例对象
            synchronized (LazySingleton.class) {

                // 防止多个线程在等待的时候，在第一个线程没有返回的时候再次进行实例化
                if (null == singleton) {

                    singleton = new LazySingleton();
                }
            }
        }
        return singleton;
    }
}
